﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using BLL;
using Exceptions;

namespace WCF
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "WCFTipoAlojamento" in code, svc and config file together.
    public class WCFTipoAlojamento : IWCFTipoAlojamento
    {
        public List<DTO.TipoAlojamento> list()
        {
            BLLTipoAlojamento bllTipoAlojamento = new BLLTipoAlojamento();
            List<BTO.TipoAlojamento> btoTipoAlojamentos = bllTipoAlojamento.list();
            List<DTO.TipoAlojamento> dtoTipoAlojamentos = new List<DTO.TipoAlojamento>();
            DTO.TipoAlojamento dtoTipoAlojamento;

            foreach (BTO.TipoAlojamento btoTipoAlojamento in btoTipoAlojamentos)
            {
                dtoTipoAlojamento = new DTO.TipoAlojamento();
                dtoTipoAlojamento.IDTipoAlojamento = btoTipoAlojamento.IDTipoAlojamento;
                dtoTipoAlojamento.descricao = btoTipoAlojamento.descricao;

                dtoTipoAlojamentos.Add(dtoTipoAlojamento);
            }

            return dtoTipoAlojamentos;
        }

        public DTO.TipoAlojamento getByID(int id)
        {
            BLLTipoAlojamento bllTipoAlojamento = new BLLTipoAlojamento();
            DTO.TipoAlojamento dtoTipoAlojamento;

            try
            {
                BTO.TipoAlojamento btoTipoAlojamento = bllTipoAlojamento.getByID(id);

                dtoTipoAlojamento = new DTO.TipoAlojamento();
                dtoTipoAlojamento.IDTipoAlojamento = btoTipoAlojamento.IDTipoAlojamento;
                dtoTipoAlojamento.descricao = btoTipoAlojamento.descricao;

            }
            catch (NotFoundTipoAlojamentoException e)
            {
                throw new NotFoundTipoAlojamentoException(e.Message);
            }
            catch (Exception)
            {
                throw new Exception("Alojamento não encontrado!");
            }

            return dtoTipoAlojamento;
        }
    }
}
